home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / recio212.zip / remsg.c < prev    next >
C/C++ Source or Header  |  1995-01-29  |  3KB  |  114 lines

  1. /*****************************************************************************
  2.    MODULE: remsg.c
  3.   PURPOSE: recio simple error message functions
  4. COPYRIGHT: (C) 1994-1995, William Pierpoint
  5.  COMPILER: Borland C Version 3.1
  6.        OS: MSDOS Version 6.2
  7.   VERSION: 2.12
  8.   RELEASE: January 29, 1995
  9. *****************************************************************************/
  10.  
  11. #include <errno.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. #include "recio.h"
  17.  
  18. /****************************************************************************/
  19. static void                  /* returns nothing                             */
  20.      errmsg(                 /* errno callback error message function       */
  21.         void)                /* no arguments                                */
  22. /****************************************************************************/
  23. {
  24.   switch (errno) {
  25.  
  26.   /* non-fatal errors */
  27.   case EACCES:   /* file access permission denied */
  28.   case EMFILE:   /* too many files open */
  29.   case ERANGE:   /* out of range */
  30.     fputs("\nERROR -- ", stderr);
  31.     fputs(strerror(errno), stderr);
  32.     fputc('\n', stderr);
  33.     break;
  34.  
  35.   /* fatal errors */
  36.   case EINVAL:   /* invalid argument */
  37.   case ENOMEM:   /* out of memory    */
  38.   default:       /* unknown error    */
  39.     fputs("\nFATAL ERROR -- ", stderr);
  40.     fputs(strerror(errno), stderr);
  41.     fputc('\n', stderr);
  42.     abort();
  43.     break;
  44.   }
  45. }
  46.  
  47. /****************************************************************************/
  48. void                         /* returns nothing                             */
  49.     rerrmsg(                 /* recio callback error message function       */
  50.         REC *rp)             /* record pointer                              */
  51. /****************************************************************************/
  52. {
  53.   if (risvalid(rp)) {
  54.   
  55.     rsetfldch(recerr, ' ');
  56.     rsettxtch(recerr, ' ');
  57.   
  58.     /* if reof indicator set */
  59.     if (reof(rp)) {
  60.       rputs(recerr, "\nERROR in");
  61.       rputs(recerr, rnames(rp));
  62.       rputs(recerr, "-- tried to read past end of file\n");
  63.     
  64.     /* else rerror indicator set */
  65.     } else {
  66.  
  67.       /* determine cause of error */
  68.       switch (rerror(rp)) {
  69.  
  70.       /* data errors */
  71.       case R_ERANGE:   /* data out of range */
  72.       case R_EINVDAT:  /* invalid data */
  73.       case R_EMISDAT:  /* missing data */
  74.       case R_ENOPUT:   /* unable to write data */
  75.         rputs(recerr, "\nDATA ERROR in");
  76.         rputs(recerr, rnames(rp));
  77.         rputs(recerr, "at record");
  78.         rputul(recerr, rrecno(rp));
  79.         rputs(recerr, "and field");
  80.         rputui(recerr, rfldno(rp));
  81.         rputs(recerr, "--");
  82.         rputs(recerr, rerrstr(rp));
  83.         rputrec(recerr);
  84.         break;
  85.         
  86.       case R_EINVAL:   /* invalid argument */
  87.         errno = EINVAL;
  88.         errmsg();
  89.         break;
  90.         
  91.       case R_ENOMEM:   /* out of memory */
  92.         errno = ENOMEM;
  93.         errmsg();
  94.         break;
  95.  
  96.       /* fatal errors */
  97.       case R_EINVMOD:  /* invalid mode  */
  98.       default:         /* unknown error */
  99.         rputs(recerr, "\nFATAL ERROR in");
  100.         rputs(recerr, rnames(rp));
  101.         rputs(recerr, "--");
  102.         rputs(recerr, rerrstr(rp));
  103.         rputrec(recerr);
  104.         abort();
  105.         break;
  106.       }
  107.     }
  108.   
  109.   /* invalid record pointer */
  110.   } else {
  111.     errmsg();
  112.   }
  113. }
  114.